package com.third.device.mg.serialport.factory.jiecang.product

import com.third.device.mg.serialport.factory.jiecang.BaseJieCangProduct
import com.third.device.mg.serialport.utils.to2ByteH

/**
 * @Date 2022/2/21
 * Description:平移导台，升降台 无适配器的指令
 */
class TranslationDesk : BaseJieCangProduct() {
    override fun productDescribe(): String = "捷昌公司升降桌系统--平移导台"


    /**
     * 上升
     */
    fun up():ByteArray{
        val msg = byteArrayOf(
            0x01 ,0
        )
        return checkSentData(msg)
    }

    /**
     * 下降
     */
    fun down():ByteArray{
        val msg = byteArrayOf(
            0x02 ,0
        )
        return checkSentData(msg)
    }

    /**
     * 停止
     */
    fun stop():ByteArray{
        val msg = byteArrayOf(
            0x0A ,0
        )
        return checkSentData(msg)
    }

    /**
     * 行程范围
     */
    fun routeScope():ByteArray{
        val msg = byteArrayOf(
            0x0C ,0
        )
        return checkSentData(msg)
    }

    /**
     * 运行至指定高度
     * @param height 单位mm
     */
    fun runHeight(height:Int):ByteArray{
        val data = height.to2ByteH()
        val msg = byteArrayOf(
            0x1B ,0x02 ,data[0] ,data[1]
        )
        return checkSentData(msg)
    }

    /**
     * 设置当前为位置为上限位
     */
    fun setUpLimit():ByteArray{
        val msg = byteArrayOf(
            0x21 ,0
        )
        return checkSentData(msg)
    }

    /**
     * 设置当前为位置为下限位
     */
    fun setDownLimit():ByteArray{
        val msg = byteArrayOf(
            0x22 ,0
        )
        return checkSentData(msg)
    }

    /**
     * 同时删除上、下限位
     */
    fun deleteLimit():ByteArray{
        val msg = byteArrayOf(
            0x23 ,0
        )
        return checkSentData(msg)
    }


    /**
     * 删除上限位
     */
    fun deleteUpLimit():ByteArray{
        val msg = byteArrayOf(
            0x23 ,0x01, 0x01
        )
        return checkSentData(msg)
    }

    /**
     * 删除下限位
     */
    fun deleteDownLimit():ByteArray{
        val msg = byteArrayOf(
            0x23 ,0x01, 0x02
        )
        return checkSentData(msg)
    }

    /**
     * 查询上下限位设置标志位信息
     * 回复:F2 F2 20 01 data sum 7E
     * data=0，表示未设置上下限位；data=0x01，表示设置了上限位；data=0x10，表示设置了下限位；data=0x11，表示设置了上限位、下限位；
     */
    fun queryLimitState():ByteArray{
        val msg = byteArrayOf(
            0x20 ,0x00
        )
        return checkSentData(msg)
    }

    /**
     * 查询上限位高度
     */
    fun queryUpLimit():ByteArray{
        val msg = byteArrayOf(
            0x21 ,0x00
        )
        return checkSentData(msg)
    }

    /**
     * 查询下限位高度
     */
    fun queryDownLimit():ByteArray{
        val msg = byteArrayOf(
            0x22 ,0x00
        )
        return checkSentData(msg)
    }

    /**
     * 设置当前为位置为记忆位置
     * @param position 1 ~ 4 最多只有记忆4个位置
     * 1：记忆位置1
     * 2：记忆位置2
     * 3：记忆位置3
     * 4：记忆位置4
     * 设置第三第四个记忆位置 ，仅在V5及以上版本控制器上使用有效
     * @return
     */
    fun setLocalityPosition(position:Int):ByteArray{
        val result = when(position){
            1 -> 0x03.toByte()
            2 -> 0x04.toByte()
            3 -> 0x25.toByte()
            4 -> 0x26.toByte()
            else -> 0x03.toByte()
        }
        val msg = byteArrayOf(
            result ,0x00
        )
        return checkSentData(msg)
    }


    /**
     * 运行到记忆位置
     * @param position 1 ~ 4 最多只有记忆4个位置
     * 1：记忆位置1
     * 2：记忆位置2
     * 3：记忆位置3
     * 4：记忆位置4
     * 设置第三第四个记忆位置 ，仅在V5及以上版本控制器上使用有效
     * @return
     */
    fun runLocalityPosition(position:Int):ByteArray{
        val result = when(position){
            1 -> 0x05.toByte()
            2 -> 0x06.toByte()
            3 -> 0x27.toByte()
            4 -> 0x28.toByte()
            else -> 0x05.toByte()
        }
        val msg = byteArrayOf(
            result ,0x00
        )
        return checkSentData(msg)
    }


}